package ar.com.ctrln.persistence.model.evento;

import java.text.SimpleDateFormat;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Transient;

import org.apache.commons.lang.builder.HashCodeBuilder;

@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
@Table(name = "TEMA_EVENTO")
public abstract class TemaEvento {
	@Transient
	public static final SimpleDateFormat FORMAT_DAY = new SimpleDateFormat(
			"dd/MM/yyyy");
	@Transient
	public static final SimpleDateFormat FORMAT_HOURS = new SimpleDateFormat(
			"HH:mm");
	@Transient
	public static final SimpleDateFormat FORMAT_COMPLETE = new SimpleDateFormat(
			"dd/MM/yyyy HH:mm");

	@Transient
	public static final String SIN_AGENDAR = "Sin Agendar";
	@Transient
	public static final String AGENDADO = "Agendado";
	@Transient
	public static final String APROBADO = "Aprobado";
	@Transient
	public static final String RECHAZADO = "Rechazado";

	@Id
	@GeneratedValue(strategy = GenerationType.TABLE)
	@Column(name = "id_temaEvento")
	private long id;

	@Column
	private String nombre;

	@Column
	private String observacion;

	@Column
	private Date fechaAlta;

	@Column
	private Date fechaAprobacion;

	@Column
	private Date fechaUltimaModificacion;
	@Column
	private String estado;

	@Transient
	private boolean seleccionado;

	@ManyToOne
	@JoinColumn(name = "id_evento")
	private EventoCalendario evento;

	@Column
	private String resultado;

	public TemaEvento() {

	}

	public TemaEvento(String nombre, String observacion, Date fechaAlta,
			Date fechaAprobacion, String estado, boolean seleccionado) {
		super();
		this.nombre = nombre;
		this.observacion = observacion;
		this.fechaAlta = fechaAlta;
		this.fechaAprobacion = fechaAprobacion;
		this.estado = estado;
		this.seleccionado = seleccionado;

	}

	public long getId() {
		return id;
	}

	public void setId(long id) {
		this.id = id;
	}

	public void setNombre(String nombre) {

		this.nombre = nombre;
	}

	public String getNombre() {

		return this.nombre;

	}

	public void setObservacion(String Observacion) {

		this.observacion = Observacion;
	}

	public String getObservacion() {

		return this.observacion;
	}

	public void setEstado(String estado) {
		this.estado = estado;
	}

	public void setEvento(EventoCalendario evento) {
		this.evento = evento;
	}

	public void setFechaAlta(Date fechaAlta) {
		this.fechaAlta = fechaAlta;
	}

	public Date getFechaAprobacion() {
		return fechaAprobacion;
	}

	public void setFechaAprobacion(Date fechaAprobacion) {
		this.fechaAprobacion = fechaAprobacion;
	}

	public Date getFechaUltimaModificacion() {
		return fechaUltimaModificacion;
	}

	public void setFechaUltimaModificacion(Date fechaUltimaModificacion) {
		this.fechaUltimaModificacion = fechaUltimaModificacion;
	}

	public boolean isSeleccionado() {
		return seleccionado;
	}

	public void setSeleccionado(boolean seleccionado) {
		this.seleccionado = seleccionado;
	}

	public String getResultado() {
		return resultado;
	}

	public void setResultado(String resultado) {
		this.resultado = resultado;
	}

	public String getEstado() {
		return estado;
	}

	public EventoCalendario getEvento() {
		return evento;
	}

	public Date getFechaAlta() {
		return fechaAlta;
	}

	@Override
	public boolean equals(Object obj) {

		return (obj instanceof TemaEvento && getId() == ((TemaEvento) obj)
				.getId());
	}

	@Override
	public int hashCode() {
		return new HashCodeBuilder(17, 37).append(getObservacion())
				.append(getNombre()).toHashCode();
	}

	public String getFechaInicioString() {
		return FORMAT_DAY.format(fechaAlta);
	}

	public String getFechaFinString() {
		return FORMAT_DAY.format(fechaAprobacion);
	}

	public String getFechaCompletaInicioString() {
		return FORMAT_COMPLETE.format(fechaAlta);
	}

	public String getFechaCompletaFinString() {
		return FORMAT_COMPLETE.format(fechaAprobacion);
	}
}
